/***
 * 缓存方法
 * @param $
 */
(function($){
	/**
	 * 树控件的页面缓存方法
	 * 
	 * 页面数据层次 
	 *  cache.NODE_TYPE.NODE_ID.表格ID[0].列名
	 * 	cache.NODE_TYPE.NODE_ID.表格ID.NORMAL(/POP).控件ID
	 */
	TreeCache = {
			getOptions : function(){
				return {
					nodeTypeObj:{},
					selItemFunc:this.getSelItem,//获取当前节点方法 ,必须
					nodeTypeKey:'NODE_TYPE',//节点类型在节点上的字段,必须
					nodeIdKey:'NODE_ID'//节点ID在节点上的字段,必须
				};
			},
			init : function(options){
				this.element = $.extend(this.getOptions(),options);
				this.nodeTypeKey = this.element.nodeTypeKey;
				this.nodeIdKey = this.element.nodeIdKey;
				this.cache={};
				var self = this;
				if(!(this.nodeTypeKey && this.nodeIdKey)){
					return
				}
				$.each(this.element.nodeTypeObj,function(key,value){
					self.cache[key] = {}; 
				});
			},
			/**
			 * 设置缓存
			 * 
			 *  data数据层次 
			 *  表格ID[0].列名
			 * 	表格ID.NORMAL(/POP).控件ID
			 *  ex:{tableId1:[{ID:1}]}
			 *  ex2:{tableId2:{NORMAL:{txtId:1}}}
			 *  
			 *  (设置的时候需要注意，参数data为节点id处的缓存，如果想清空原缓存则应该
			 *  data = {...},如果是覆盖部分则应该data.XXX = {...})
			 */
			setPageCache : function(data){
				var self = this;
				var pageCache = self.getPageCache()||{};
				var selItem = self.element.selItemFunc();
				if(!data){
					self.cache[selItem[self.nodeTypeKey]][selItem[self.nodeIdKey]]=null;
				}
				if($.isPlainObject(data)){
					$.each(data,function(key,value){
						if($.isPlainObject(value)){//包含各种控件
							var cacheOld = pageCache[key]||{};
							$.extend(true,cacheOld,value);
							value = cacheOld;
						}
						if(!self.getPageCache()){
							self.cache[selItem[self.nodeTypeKey]][selItem[self.nodeIdKey]] ={};
						}
						self.cache[selItem[self.nodeTypeKey]][selItem[self.nodeIdKey]][key]=value;
					});
				}
			},
			/**
			 * 获得至节点ID处的缓存
			 */
			getPageCache : function(){
				var selItem = this.element.selItemFunc();
				var pageCache = this.cache[selItem[this.nodeTypeKey]][selItem[this.nodeIdKey]];
				return pageCache;
			},
			/**
			 * 给一般表格赋值
			 * 控件类型：POP：弹出框，NORMAL：一切拥有value属性的控件，TEXT:文本节点,BOX:选择框（单/复）
			 */
			cacheToPage : function(){
				$.each(this.getPageCache(),function(key,value){
					//一般控件表格
					if($.isPlainObject(value)){
						if(value.POP){
							$.each(value.POP,function(id,itemVal){
								window[id].setValue(itemVal);
								window[id].dialog.setInitValue(itemVal);
							});
						}
						if(value.NORMAL){
							$.each(value.NORMAL,function(id,itemVal){
								$('#'+id).val(itemVal);
							});
						}
						if(value.TEXT){
							$.each(value.TEXT,function(id,itemVal){
								$('#'+id).text(itemVal);
							});
						}
						if(value.BOX){
							$.each(value.BOX,function(id,itemVal){
								if($('#'+id).length>0){
									$('#'+id).prop('checked',itemVal);
								}
								else{
									$('[name='+id+'][value='+itemVal+']').prop('checked',true);
								}
							});
						}
						//TODO
					}
					//列表表格
					if($.isArray(value) && window[key] ){
						var impl = window[key].impl;
						if(impl && impl.defaults && impl.defaults.colModel && impl.defaults.colModel.length>0){
							window[key].loadData(value);
							if(value.length>0){
								window[key].setSelectedRow(0,true);
							}
						}
					}
				});
			},
			getSelItem:function(){
				return {NODE_ID:"",NODE_TYPE:""};
			}
			
	};
})(jQuery);